查看原文
其他

Oracle 12c多租户特性详解:PDB 的出与入 InAndOut

盖国强 数据和云 2019-12-14


(题图来自Oracle VP , Sally Piao的摄影佳作,感谢摄影师授权)

编辑手记:这一节我们将介绍多租户中PDB的Plug-Out 与 Plug-In与备份恢复,这篇文章来自<深入解析Oracle>一书的摘录。


将 Non-PDB 插入 CDB

 

在12c中,可以将一个非 CDB(也即NON-CDB)插入到 CDB 中,这个过程需要在只读模式下进行。

 

以下测试首先启动一个常规的 Non-CDB 数据库:




这个数据库中已经预先建立了一个数据库用户,并且有一个测试表:




在12c中,新增加的包 DBMS_PDB 可以用于进行迁移:




在 OPEN 模式下执行 DESCRIBE 操作会出现错误,提示该操作只能在只读模式下进行:



以下启动数据库到只读模式:



执行 DBMS _PDB.DESCRIBE 过程,然后关闭数据库:



这个步骤在 $ORACLE_HOME/dbs 目录下生成了一个 XML 文件,用于描述需要迁移的数据文件,其主要内容如下:




在 CDB 中执行 PLUG,就可以将这个 NON-CDB 插入到 CDB 中,指定 COPY 参数,将文件复制到 CDB 的相应目录下,如果已经复制到特定目录,则可以指定 NOCOPY 选项,就无需再复制一次。这也是对以前版本中传输表空间技术的增强:




以下列表中可以看到,新的 PDB 数据库已经被插入到 CDB 中:




插入成功之后可以连接到数据库进行数据验证:




UNPLUG 数据库


通过 UNPLUG 命令可以拔出一个 PDB:



以上命令生成一个 XML 文件,缺省存储于 $ORACLE_HOME/dbs目录下:




也可以在以上命令中指定目录,这样 XML 文件就可以存储于特定位置:




XML 文件包含了数据文件的描述信息,用于转移数据库。UNPLUG 后 PDB 的状态被变更为MOUNTED,数据库被关闭:




已经 UNPLUG 的数据库不能在当前数据库中直接打开:




通过如下命令在当前数据库中删除一个已经 UNPLUG 的数据库:




如果要集联删除所有的数据文件,则可以将 keep datafiles 指令换成 including datafiles.


CDB 的视图与原理

 

随着 CDB、PDB 的引入一系列的视图对应引入 ,用于数据库信息的查询和展现。

 

如在 CDB 层面的用户信息查询,可以通过新的视图 CDB_USERS 进行,通过这个视图可以直观的看到一个用户在哪些容器中存在:



查询临时文件可以通过视图 CDB_TEMP_FILES 进行:




对于常规的 DBA 类视图,在 CDB 中都具有对应的视图。下表列出了与常用数据库视图相对应的一些 CDB 视图:




在数据库的创建脚本中,还可以找到最核心的底层表 container$ 的创建语句,该底层表用于记录各容器的信息,通过该表与其他对象的关联,CDB 的内容可以被隔离和识别出来:



通过数据库创建的核心脚本 - cdcore.sql ,可以找到部分视图的创建方式,如以下脚本记录了 DBA_PDBS 视图的创建方式,正是通过 container$ 和 obj$ 的关联过滤出容器对象的:



对于 PDB 的常规视图创建,另外一个核心脚本是 -catcdbviews.sql,在这个脚本中创建了一个 PackageCDBView,通过这个程序包,根据现有的 DBA 视图批量创建 CDB 所需要的内部视图、同义词并进行授权:



接下来的包体中定义了详细的操作步骤,其中最核心的是根据数据字典视图批量的创建 CDB 所需要的视图:




最终执行转换成类似如下的一个系列 SQL:




了解了这些内部过程,我们就可以对 CDB 的各类视图结构有各大致的了解。


PDB 为云计算而生


在 Oracle 数据库中,PDB 新特性的引入,被称为是为云计算而生的新技术,在云数据库平台上,需要将不同用户的对象、权限等信息彻底分割开来,原有的 Schema 方式并不适合,而 PDB 完全满足隔离与迁移的需要,彻底简化了云数据库平台的管理和维护。

 

我们先来看一看在 Oracle 11g 版本之上的 Oracle 云数据库平台,下图包含了销售方式,Oracle 公司通过存储空间不同来进行收费区分,销售单位只能为1个 Schema,这是 Oracle Database 11g 版本的特性决定的,如果一个企业能否随意创建 Schema,则数据库会变得异常混乱,而 PDB 模式通过隔离可以彻底解决这一问题。




目前开放的云数据平台,可以通请获用的账户。在得了数据库账户之后,可以通Oracle Application Express 行在线用开布,后台的数据对象可以通过 APEX 内嵌的管理功能进行维护



Oracle SQL Developer 工具中,已集成了“Cloud Connection”模用于云端的数据管理:



然目前 Oracle 的云数据看起来相当简单,但是不如何,云数据代已慢慢走来。


如何加入"云和恩墨大讲堂"微信群

搜索 盖国强(Eygle)微信号:eeygle,或者扫描下面二维码,备注:云和恩墨大讲堂,即可入群。每周与千人共享免费技术分享,与讲师在线讨论。

近期文章

六一快乐 | 云和恩墨大讲堂电子期刊第六期

风云再起:美500强Oracle利润率IT类第一

Oracle 12.2:Sharding 新特性揭秘

用SQL解一道数学题:Gauss和Poincare

Oracle 12c ASM 防火防盗新特性揭秘

DBA入门之路:学习与进阶之经验谈


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存